#ifndef PREVIEWITEM_H
#define PREVIEWITEM_H

#include <QPushButton>
#include <QImage>
#include <QString>
#include <QMouseEvent>

QT_BEGIN_NAMESPACE
namespace Ui { class PreviewItem; }
QT_END_NAMESPACE

/**
 * @brief 图像预览项类
 * 
 * 用于显示单个图像的预览，包含图像显示和删除功能。
 */
class PreviewItem : public QPushButton
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父窗口指针
     */
    explicit PreviewItem(QWidget *parent = nullptr);
    
    /**
     * @brief 析构函数
     */
    ~PreviewItem();
    
    /**
     * @brief 设置预览图像
     * @param image 要显示的图像
     */
    void setImage(const QImage &image);
    
    /**
     * @brief 设置图像的GUID
     * @param imageGuid 图像唯一标识
     */
    void setImageGuid(const QString &imageGuid);
    
    /**
     * @brief 获取图像的GUID
     * @return 图像唯一标识
     */
    QString getImageGuid() const;
    
private:
    /**
     * @brief 设置选中状态变化后的样式改变
     * @param checked 是否选中
     */
    void setCheckedChange(bool checked);

signals:
    /**
     * @brief 当删除按钮被点击时发出的信号
     * @param imageGuid 要删除的图像GUID
     */
    void deleteRequested(const QString &imageGuid);
    
    /**
     * @brief 当预览项被点击时发出的信号
     * @param imageGuid 被点击的图像GUID
     */
    void selectImageRequested(const QString &imageGuid);

private slots:
    /**
     * @brief 处理关闭按钮点击事件
     */
    void on_closeButton_clicked();
    

private:
    Ui::PreviewItem *ui;         // UI指针
    QString m_imageGuid;         // 图像唯一标识
};

#endif // PREVIEWITEM_H
